package com.lurenjia.pets_adoption.controller;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lurenjia.pets_adoption.dto.R;
import com.lurenjia.pets_adoption.entity.Notices;
import com.lurenjia.pets_adoption.service.INoticesService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;

/**
 * 公告管理前端控制器
 * <p>
 * 提供公告管理相关功能，包括发布公告、查询公告列表、删除公告等操作。
 * 支持公告的增删查功能，便于管理员进行公告内容管理。
 *
 * @module 公告管理
 */
@RestController
@Slf4j
@RequestMapping("/notices")
public class NoticesController {

    @Autowired
    private INoticesService noticesService;

    /**
     * 发布新公告
     * <p>
     * 接收公告信息并保存到数据库中，由管理员发布新的公告内容。
     *
     * @param notice  公告实体对象，包含公告标题、内容、类型等信息
     * @param session 用户会话信息，用于获取当前操作用户信息
     * @return 操作结果响应
     */
    @PostMapping()
    public R<String> save(@RequestBody Notices notice, HttpSession session){
        log.info("收到发公告的请求：{}", notice);
        R<String> resp = noticesService.releaseNotice(notice,session);
        return resp;
    }

    /**
     * 分页查询公告数据
     * <p>
     * 根据分页参数和筛选条件获取公告列表，支持按发布者姓名和公告类型进行筛选。
     *
     * @param page         页码
     * @param pageSize     每页大小
     * @param userRealname 发布者姓名（模糊查询）
     * @param noticeType   公告类型筛选条件
     * @return 分页的公告列表响应
     */
    @GetMapping("/page")
    public R<Page> page(Integer page, Integer pageSize, String userRealname, Integer noticeType) {
        log.info("收到获取公告列表的请求,发布者{},文章类型{}", userRealname,noticeType);
        R<Page> resp = noticesService.getList(page,pageSize,userRealname,noticeType);
        return resp;
    }

    /**
     * 删除公告
     * <p>
     * 根据公告ID删除指定公告，用于管理员管理过期或无效的公告信息。
     *
     * @param noticeId 要删除的公告ID
     * @return 操作结果响应
     */
    @DeleteMapping("/{noticeId}")
    public R<String> delete(@PathVariable Long noticeId) {
        log.info("收到删除公告的请求，公告ID：{}", noticeId);
        R<String> resp = noticesService.deleteNotice(noticeId);
        return resp;
    }
}